// const AV = require('../../utils/av-weapp.js')
// var app = getApp()
const pageInterceptor = require('../../components/pageInterceptor').pageInterceptor;
const api = require('../../api/api');
const constants = require('../../constants/constants');
const request = require('../../components/request');
const util = require('../../utils/util');

// Page({
pageInterceptor({
  data: {
    /**
     * 购物车中的所有项
     */
    carts: [],
    /**
     * 减号的状态，用于html的class属性
     */
    minusStatuses: [],
    /**
     * 全选按钮是否被选中
     */
    selectedAllStatus: false,
    /**
     * 总的应付金额
     */
    total: 0,
    startX: 0,
    itemLefts: []
  },
  /**
   * 加载订单中的所有项、计算总的应付金额
   * @param {*} options 
   */
  onLoad: function (options) {
    console.log(`调用cart.js文件的onLoad方法`);
  },
  onTabItemTap: function () {
    console.log(`调用cart.js文件的onTabItemTap方法`);
    this.reloadData();
  },
  /**
   * 点击减号
   */
  bindMinus: function (e) {
    // loading提示
    wx.showLoading({
      title: '操作中',
      mask: true
    });
    var index = parseInt(e.currentTarget.dataset.index);
    debugger;
    var num = this.data.carts[index].quantity;
    // 如果只有1件了，就不允许再减了
    if (num > 1) {
      num--;
    }
    // 只有大于一件的时候，才能normal状态，否则disable状态
    var minusStatus = num <= 1 ? 'disabled' : 'normal';
    // 购物车数据
    var carts = this.data.carts;
    carts[index].quantity = num;
    // 按钮可用状态
    var minusStatuses = this.data.minusStatuses;
    minusStatuses[index] = minusStatus;

    // 将数值与状态写回
    this.setData({
      carts: carts,
      minusStatuses: minusStatuses
    });

    // 更新数据库
    var url = api.data.prefix + api.data.url.cart.updateForId;
    request.post(url, carts[index], {
      'content-type': 'application/json',
    }).action((res) => {
      console.log(`接口${api.data.url.cart.updateForId}：${JSON.stringify(res)}`);
      wx.hideLoading();
    }).catch(err => {
      console.error(err);
    });

    // 计算总的应付金额
    this.sum();
  },
  /**
   * 点击加号
   * @param {*} e 
   */
  bindPlus: function (e) {
    wx.showLoading({
      title: '操作中',
      mask: true
    });

    var index = parseInt(e.currentTarget.dataset.index);
    var num = this.data.carts[index].quantity;
    // 自增
    num++;
    // 只有大于一件的时候，才能normal状态，否则disable状态
    var minusStatus = num <= 1 ? 'disabled' : 'normal';
    // 购物车数据
    var carts = this.data.carts;
    carts[index].quantity = num;
    // 按钮可用状态
    var minusStatuses = this.data.minusStatuses;
    minusStatuses[index] = minusStatus;

    // 将数值与状态写回
    this.setData({
      carts: carts,
      minusStatuses: minusStatuses
    });

    // 更新数据库
    var url = api.data.prefix + api.data.url.cart.updateForId;
    request.post(url, carts[index], {
      'content-type': 'application/json',
    }).action((res) => {
      console.log(`接口${api.data.url.cart.updateForId}：${JSON.stringify(res)}`);
      wx.hideLoading();
    }).catch(err => {
      console.error(err);
    });

    // 计算总的应付金额
    this.sum();
  },
  /**
   * 当手工修改商品数量时
   * @param {*} e 
   */
  bindManual: function (e) {
    wx.showLoading({
      title: '操作中',
      mask: true
    });

    var index = parseInt(e.currentTarget.dataset.index);
    var carts = this.data.carts;
    var num = parseInt(e.detail.value);
    carts[index].quantity = num;

    // 将数值与状态写回
    this.setData({
      carts: carts
    });

    // 更新数据库
    var url = api.data.prefix + api.data.url.cart.updateForId;
    request.post(url, carts[index], {
      'content-type': 'application/json',
    }).action((res) => {
      console.log(`接口${api.data.url.cart.updateForId}：${JSON.stringify(res)}`);
      wx.hideLoading();
    }).catch(err => {
      console.error(err);
    });

    // 计算总的应付金额
    this.sum();
  },
  bindManualTapped: function () {
    // 什么都不做，只为打断跳转
  },
  /**
   * 勾选复选框
   * @param {*} e 
   */
  bindCheckbox: function (e) {
    wx.showLoading({
      title: '操作中',
      mask: true
    });

    /*绑定点击事件，将checkbox样式改变为选中与非选中*/
    //拿到下标值，以在carts作遍历指示用
    var index = parseInt(e.currentTarget.dataset.index);
    //原始的icon状态
    var selected = this.data.carts[index].selected;
    var carts = this.data.carts;
    // 对勾选状态取反
    carts[index].selected = !selected;

    // 写回经点击修改后的数组
    this.setData({
      carts: carts,
    });

    // 更新数据库
    var url = api.data.prefix + api.data.url.cart.updateForId;
    request.post(url, carts[index], {
      'content-type': 'application/json',
    }).action((res) => {
      console.log(`接口${api.data.url.cart.updateForId}：${JSON.stringify(res)}`);
      wx.hideLoading();
    }).catch(err => {
      console.error(err);
    });

    // 计算总的应付金额
    this.sum();
  },
  /**
   * 点击全选按钮
   */
  bindSelectAll: function () {
    wx.showLoading({
      title: '操作中',
      mask: true
    });

    // 环境中目前已选状态
    var selectedAllStatus = this.data.selectedAllStatus;
    // 取反操作
    selectedAllStatus = !selectedAllStatus;
    // 购物车数据，关键是处理selected值
    var carts = this.data.carts;
    // 遍历
    for (var i = 0; i < carts.length; i++) {
      carts[i].selected = selectedAllStatus;
      // 更新数据库
      var url = api.data.prefix + api.data.url.cart.updateForId;
      request.post(url, carts[i], {
        'content-type': 'application/json',
      }).action((res) => {
        console.log(`接口${api.data.url.cart.updateForId}：${JSON.stringify(res)}`);
      }).catch(err => {
        console.error(err);
      });
    }

    this.setData({
      selectedAllStatus: selectedAllStatus,
      carts: carts,
    });

    wx.hideLoading();

    // 计算总的应付金额
    this.sum();
  },
  /**
   * 点击立刻结算，跳转到提交点单页面
   */
  bindCheckout: function () {
    // 遍历已勾选的商品
    var cartIds = this.calcIds();
    cartIds = cartIds.join(',');
    wx.navigateTo({
      url: '../../../../order/checkout/checkout?cartIds=' + cartIds + '&amount=' + this.data.total
    });
  },
  /**
   * 删除购物车中的商品
   * @param {*} e 
   */
  delete: function (e) {
    debugger;
    var that = this;
    // 购物车单个删除
    var id = e.currentTarget.dataset.id;
    wx.showModal({
      title: '提示',
      content: '确认要删除吗',
      success: function (res) {
        if (res.confirm) {
          // 删除
          var url = util.restfulFormat(api.data.prefix + api.data.url.cart.deleteById, { id: id });
          request.get(url, null, {
            'content-type': 'application/json',
          }).action((res) => {
            console.log(`接口${api.data.url.cart.deleteById}：${JSON.stringify(res)}`);

            wx.showToast({
              title: '删除成功',
              icon: 'success',
              duration: 1000
            });

            that.reloadData();

            that.setData({
              itemLefts: []
            });
          }).catch(err => {
            console.error(err);
          });
        }
      }
    })
  },
  /**
   * 遍历已勾选的商品
   */
  calcIds: function () {
    var cartIds = [];
    for (var i = 0; i < this.data.carts.length; i++) {
      if (this.data.carts[i].selected == true) {
        cartIds.push(this.data.carts[i].id);
      }
    }
    if (cartIds.length <= 0) {
      wx.showToast({
        title: '请勾选商品',
        icon: 'success',
        duration: 1000
      })
    }
    return cartIds;
  },
  /**
   * 重新加载页面数据
   */
  reloadData: function () {
    var that = this;
    var minusStatuses = [];

    // 加载订单中的所有项
    var url = api.data.prefix + api.data.url.cart.page;
    let user = wx.getStorageSync('userInfo');
    request.post(url, { userId: user.userId, pageNo: 1, pageSize: 10 }, {
      'content-type': 'application/json',
    }).action((res) => {
      console.log(`接口${api.data.url.cart.page}：${JSON.stringify(res)}`);

      for (var i = 0; i < res.data.result.list.length; i++) {
        minusStatuses[i] = res.data.result.list[i].quantity <= 1 ? 'disabled' : 'normal';
      }

      that.setData({
        carts: res.data.result.list,
        minusStatuses: minusStatuses
      });

      // 计算总的应付金额
      this.sum();
    }).catch(err => {
      console.error(err);
    });
  },
  /**
   * 计算总的应付金额
   */
  sum: function () {
    var carts = this.data.carts;
    // 计算总金额
    var total = 0;
    for (var i = 0; i < carts.length; i++) {
      if (carts[i].selected == true) {
        total += carts[i].quantity * carts[i].goodsPrice;
      }
    }
    total = total.toFixed(2);
    // 写回经点击修改后的数组
    this.setData({
      carts: carts,
      total: total
    });
  },
  /**
   * 点击购物车某件商品跳转到商品详情
   * @param {*} e 
   */
  showGoods: function (e) {
    var goodsId = e.currentTarget.dataset.goodsId;
    wx.navigateTo({
      url: '../goods/detail/detail?objectId=' + goodsId
    });
  },
  /**
   * 触屏开始
   * @param {*} e 
   */
  touchStart: function (e) {
    var startX = e.touches[0].clientX;
    this.setData({
      startX: startX,
      itemLefts: []
    });
  },
  /**
   * 触屏移动
   * @param {*} e 
   */
  touchMove: function (e) {
    var index = e.currentTarget.dataset.index;
    var movedX = e.touches[0].clientX;
    var distance = this.data.startX - movedX;
    var itemLefts = this.data.itemLefts;
    itemLefts[index] = -distance;
    this.setData({
      itemLefts: itemLefts
    });
  },
  /**
   * 触屏结束
   * @param {*} e 
   */
  touchEnd: function (e) {
    var index = e.currentTarget.dataset.index;
    var endX = e.changedTouches[0].clientX;
    var distance = this.data.startX - endX;
    // button width is 60
    var buttonWidth = 60;
    if (distance <= 0) {
      distance = 0;
    } else {
      if (distance >= buttonWidth) {
        distance = buttonWidth;
      } else if (distance >= buttonWidth / 2) {
        distance = buttonWidth;
      } else {
        distance = 0;
      }
    }
    var itemLefts = this.data.itemLefts;
    itemLefts[index] = -distance;
    this.setData({
      itemLefts: itemLefts
    });
  }
  // })
}, true)